package com.zenithmind.version.service;

import com.zenithmind.version.pojo.dto.BranchCreateDTO;
import com.zenithmind.version.pojo.vo.BranchVO;

/**
 * 分支管理服务接口 - 遵循接口隔离原则，专门处理分支的基本管理操作
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface BranchManagementService {

    /**
     * 创建分支
     * 
     * @param createDTO 创建DTO
     * @return 分支VO
     */
    BranchVO createBranch(BranchCreateDTO createDTO);

    /**
     * 根据ID查询分支详情
     * 
     * @param id 分支ID
     * @return 分支VO
     */
    BranchVO getBranchById(String id);

    /**
     * 根据名称和仓库查询分支
     * 
     * @param name 分支名称
     * @param repositoryId 仓库ID
     * @return 分支VO
     */
    BranchVO getBranchByNameAndRepository(String name, String repositoryId);

    /**
     * 更新分支信息
     * 
     * @param id 分支ID
     * @param updateDTO 更新DTO
     * @return 是否成功
     */
    Boolean updateBranch(String id, BranchCreateDTO updateDTO);

    /**
     * 删除分支
     * 
     * @param id 分支ID
     * @return 是否成功
     */
    Boolean deleteBranch(String id);

    /**
     * 设置默认分支
     * 
     * @param repositoryId 仓库ID
     * @param branchId 分支ID
     * @return 是否成功
     */
    Boolean setDefaultBranch(String repositoryId, String branchId);

    /**
     * 设置保护分支
     * 
     * @param branchId 分支ID
     * @param isProtected 是否保护
     * @return 是否成功
     */
    Boolean setProtectedBranch(String branchId, Boolean isProtected);

    /**
     * 检查分支名称是否可用
     * 
     * @param name 分支名称
     * @param repositoryId 仓库ID
     * @return 是否可用
     */
    Boolean checkBranchNameAvailable(String name, String repositoryId);
}
